package com.cy.mall.service.wechat;

import com.cy.mall.model.PageBean;
import com.cy.mall.model.Result;
import com.cy.mall.model.doc.WechatMessageTemplateLog;
import com.cy.mall.model.domain.customer.CustomerWechat;
import com.cy.mall.model.dto.wechat.WechatMessageTemplateDTO;
import com.cy.mall.model.enums.wechat.WechatSopce;

import java.util.Map;

/**
 * @Description 微信api服务
 * @Author tanyilin
 * @Date 2019/3/14 18:10
 */
public interface WechatService {

    /**
     * 获取微信基础access_token
     *
     * @return
     */
    String getBaseAccessToken();

    /**
     * 获取微信分享Ticket
     *
     * @param token
     * @return
     */
    String getTicket(String token);

    /**
     * 获取微信分享签名
     *
     * @param token
     * @param ticket
     * @param url
     * @return
     */
    Map<String, String> getShareSignature(String token, String ticket, String url);

    /**
     *获取用户授权路径url
     * @param customerId
     * @param wechatSopce
     * @return java.lang.String
     */
    String getAuthorizeUrl(Long customerId, WechatSopce wechatSopce);

    /**
     * 根据授权回调的code获取用户的access_token，同时也会返回openid
     *
     * @param code
     * @return
     */
    Map<String, Object> getUserAccessToken(String code);

    /**
     * 根据微信用户的access_token、openId获取微信用户信息
     *
     * @param accessToken
     * @param openId
     * @return
     */
    Map<String, Object> getUserInfo(String accessToken, String openId);

    /**
     *用户授权回调方法
     * @param code, state
     * @return com.cy.mall.model.domain.customer.CustomerWechat
     */
    CustomerWechat bindCallback(String code, String state);

    /**
     * 绑定 客户-微信 关系 customerWechat
     * @param customerWechat
     * @return void
     */
    void bindCustomerWechat(CustomerWechat customerWechat);

    /**
     * 发送微信模板信息
     *
     * @param wechatMessageTemplateDTO
     * @return
     */
    Result sendTemplateMessage(WechatMessageTemplateDTO wechatMessageTemplateDTO);

    /**
     * 查询微信消息模板发送记录-分页
     * @param page
     * @param limit
     * @return com.cy.mall.model.PageBean<com.cy.mall.model.doc.WechatMessageTemplateLog>
     */
    PageBean<WechatMessageTemplateLog> getWechatMessageTemplateSendLog(String openId, int page, int limit);
}
